const express = require("express");
const mongoose = require("mongoose");
const bcryptjs = require("bcryptjs");

const app = express();

const schema = new mongoose.Schema({
  username: String,
  password: String,
  nickname: String,
});

const Model = mongoose.model("User", schema);

app.use(express.json());
app.use(express.urlencoded());

// 注册
app.post("/register", async (req, res) => {
  try {
    // 1. 取值
    const { username, password, nickname } = req.body;

    // 2. username 是否存在
    const isExist = await Model.findOne({ username: username });

    // 3. 判断是否存在
    if (isExist) {
      // 响应内容给客户端
      res.send({
        code: -1,
        msg: "用户名已占用",
      });
      return;
    }

    // 加密 password
    const hashPassword = bcryptjs.hashSync(password, 10);

    // 写入 数据库
    await Model.create({
      username: username,
      password: hashPassword,
      nickname: nickname,
    });

    // 响应
    res.send({
      code: 0,
      msg: "注册成功",
    });
  } catch (error) {
    console.log(error);
    res.send({
      code: -1,
      msg: "系统异常",
    });
  }
});

// 登录
app.post("/login", async (req, res) => {
  try {
    // 1. 取值
    const { username, password } = req.body;

    // 2. 查询数据库  根据用户名先查询到数据库中这条数据
    const doc = await Model.findOne({
      username: username,
    });

    // 3. 判断 doc 存在还是不存在
    // if (doc) {
    //   res.send({
    //     code: 0,
    //     msg: "登录成功",
    //     data: doc,
    //   });
    // } else {
    //   res.send({
    //     code: -1,
    //     msg: "用户名或密码不正确",
    //   });
    // }

    if (!doc) {
      res.send({
        code: -1,
        msg: "用户名不正确",
      });

      return;
    }

    console.log("找到了，doc是", doc);
    // doc.password 就是数据库之前存储的 密文

    // 比对，用户传递过来的 password 与 doc.password 做匹配
    const isOk = bcryptjs.compareSync(password, doc.password);
    if (isOk) {
      // 匹配成功
      res.send({
        code: 0,
        msg: "登录成功",
        data: {
          username: doc.username,
          nickname: doc.nickname,
        },
      });
    } else {
      // 匹配不成功
      res.send({
        code: -1,
        msg: "密码不正确",
      });
    }
  } catch (error) {
    console.log(error);
    res.send({
      code: -2,
      msg: "系统异常",
    });
  }
});

async function main() {
  await mongoose.connect("mongodb://127.0.0.1:27017/test");

  app.listen(3000, () => {
    console.log("服务启动成功");
  });
}

main();
